package cn.chengpengper.seckill.stock.infrastructure.mapper;

import cn.chengpengper.seckill.stock.domain.model.entity.SeckillStockBucket;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author chengpeng.hu
 */
public interface SeckillStockBucketMapper {

    /**
     * 增加库存
     *
     * @param quantity 数量
     * @param serialNo 库存编号
     * @param goodsId  商品ID
     * @return 影响行数
     */
    int increaseStock(@Param("quantity") Integer quantity, @Param("serialNo") Integer serialNo, @Param("goodsId") Long goodsId);

    /**
     * 减少库存
     *
     * @param quantity 数量
     * @param serialNo 库存编号
     * @param goodsId  商品ID
     * @return 影响行数
     */
    int decreaseStock(@Param("quantity") Integer quantity, @Param("serialNo") Integer serialNo, @Param("goodsId") Long goodsId);

    /**
     * 根据商品id获取库存分桶列表
     *
     * @param goodsId 商品ID
     * @return 库存列表
     */
    List<SeckillStockBucket> getBucketsByGoodsId(@Param("goodsId") Long goodsId);

    /**
     * 根据商品id修改状态
     *
     * @param status  状态
     * @param goodsId 商品ID
     * @return 影响行数
     */
    int updateStatusByGoodsId(@Param("status") Integer status, @Param("goodsId") Long goodsId);

    /**
     * 根据商品id删除数据
     *
     * @param goodsId 商品ID
     * @return 影响行数
     */
    int deleteByGoodsId(@Param("goodsId") Long goodsId);

    /**
     * 保存分桶数据
     *
     * @param buckets 分桶数据
     */
    void insertBatch(@Param("buckets") List<SeckillStockBucket> buckets);

}
